Computer graphics display systems are commonly used for displaying graphical representations of objects on a two-dimensional video display screen. Current computer graphics display systems provide highly detailed representations and are used in a variety of applications. A computer graphics display system generally comprises a central processing unit (CPU), system memory, a graphics machine and a video display screen.
In typical computer graphics display systems, an object to be presented on the display screen is broken down into graphics primitives. Primitives are basic components of a graphics display and may include points, lines, vectors and polygons (e.g., triangles and quadrilaterals). Typically, a hardware/software scheme is implemented to render, or draw, the graphics primitives that represent a view of one or more objects being represented on the display screen.
Generally, the primitives of the object to be rendered are defined by the host CPU in terms of primitive data. For example, when the primitive is a triangle, the host computer defines the primitive in terms of the X, Y and Z coordinates of each of its three vertices, the normals of each of the vertices, N.sub.x, N.sub.y and N.sub.z, and the red, green, blue and alpha (R, G, B and .alpha.) color values of each vertex. Alpha is a transparency value. Rendering hardware interpolates all of this data to compute the display screen pixels that represent each primitive, and the R, G, B and .alpha. values for each pixel.
Additionally, the primitives may also be defined in terms of texture by using texture mapping when rendering images. Texture mapping allows different parts of an object being rendered to have different appearances, such as when it is necessary or desirable to render an object which is comprised of several composite features, such as a brick wall comprised of several bricks. Rather than drawing each brick individually, a wall can be drawn and then a brick wall texture can be mapped onto the wall.
Texture coordinates are normally referred to as s, t, r and q coordinates. In order to draw a texture-mapped scene, both the object coordinates and the texture coordinates for each vertex must be implemented. The object coordinates define the location of the vertex on the screen and the texture coordinates determine which texel in the texture map is to be assigned to that particular vertex.
A typical graphics machine includes a geometry accelerator, a rasterizer, a frame buffer controller and a frame buffer. Texture mapping is accomplished in the rasterizer, which performs pixel rasterization and texel rasterization to render a texture-mapped image on the display. The geometry accelerator receives three-dimensional vertex data from the host CPU in terms of red, green, blue and alpha (R, G, B and .alpha.) data, X, Y, and Z data, N.sub.x, N.sub.y and N.sub.z data, and s, t, r and q coordinate data for each primitive received by the geometry accelerator. The X, Y and Z coordinates define the locations of the vertices of the primitives on the display screen whereas the N.sub.x, N.sub.y and N.sub.z data define the directions of the normals of the vertices of the primitives. The geometry accelerator processes all this data and outputs new R, G and B data and s, t, r and q data for each vertex to the rasterizer. When the image to be rendered is two-dimensional, the information defining the image can be sent directly to the rasterizer without first being sent to the geometry accelerator. Once the rasterizer receives the R, G, B data and the s, t, r and q data for the vertices, the rasterizer performs texture mapping and rasterizes the texture-mapped image.
Rasterizers capable of performing texture mapping generally comprise a texel rasterizing component and a pixel rasterizing component. These two components operate in parallel and are synchronized such that, as the pixel rasterizing component determines the location of a pixel on the screen, the texel rasterizing component determines the texture to be assigned to the particular pixel and outputs it to the pixel rasterizing component which maps it onto the particular pixel. For example, as the pixel rasterizing component determines the location of a pixel on the screen corresponding to a corner of a floor being rendered, the texel rasterizing component may determine the texture of a carpet to be mapped onto the pixel.
Within the texel rasterizing component, texture information and commands are received from the host CPU and processed to generate a texel which is output to the pixel rasterizing component. Generally, components referred to as an edge stepper and a span stepper within the texel rasterizer determine the s, t, r and q coordinates of each texel to be mapped and output this information to a rational linear interpolator, which applies a correction to the texel values to obtain a perspective view. This information is then output to a tiler which performs mathematical calculations on the texture information sent by the host CPU to the texel rasterizer to generate virtual addresses. These virtual addresses are then output to a directory which references them to memory to produce memory addresses corresponding to the locations in memory where the texture data corresponding to the texture to be mapped is stored. This information is then output to the pixel rasterizing component which maps the textures onto the pixels.
In order to maximize the speed of the rasterizing process, it is known to utilize cache-based rasterizers which store the texture information in cache memory to enable the rasterizer to quickly access the texture information. However, this requires checking the cache to determine whether the texture information sought is held in cache. When the texture information sought is not held in cache, the processing of the information by the components of the texel rasterizer, such as the tiler and the rational linear interpolator, must be halted long enough for the texture information sought to be downloaded by the host CPU into cache. The information being processed by the texel rasterizer travels along a "buffered path" while the information being downloaded into cache travels along an "unbuffered path". In order to prevent the information traveling along the unbuffered path from overwriting, and thus corrupting, the data traveling along the buffered path, separate paths have been used. By using separate paths, the information being sent along the buffered path is halted and the information being downloaded into cache by the CPU is simply sent down the unbuffered path and loaded into cache, without the possibility of overwriting the data traveling along the buffered path. Once the information has been loaded into cache, the shifting and processing of the data along the buffered path is resumed.
One disadvantage of providing completely separate paths for the buffered information and for the information being downloaded into cache is that each of these paths requires a large number of pipe stages for each path which, in turn, requires the allocation of a large amount of space for each path.
Accordingly, a need exists for a method and apparatus which maximizes the processing speed and efficiency of a cache-based texel rasterizer of a computer graphics display system while minimizing the amount of space required to be allocated for the buffered and unbuffered paths of the texel rasterizer component.